import pandas as pd
import sys
import os

# 将项目根目录添加到 sys.path
project_root = os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
sys.path.insert(0, project_root)

# 原有的导入语句
from crawler.jsl.spider_jsl_bond_concept_parser import Spider_jsl_bond_concept_parser
from utils.price_utils import calculate_strong_peaks, calculate_troughs_values,merge_number
import os

def read_bond_info_csv(file_path):
    """
    读取可转债信息列表.csv文件
    :param file_path: 文件路径
    :return: 读取后的DataFrame
    """
    pd_org_data = pd.read_csv(file_path)
    pd_org_data = pd_org_data[pd_org_data['交易市场'] != 'sb']
    pd_org_data = pd_org_data[pd_org_data['发行日期'].notna()]
    return pd_org_data

def select_useful_fields(df, useful_fields):
    """
    根据用户配置的有用字段进行数据筛选
    :param df: 输入的DataFrame
    :param useful_fields: 用户配置的有用字段列表
    :return: 筛选后的DataFrame
    """

    return df[useful_fields]

def merge_with_concept_info(df, concept_parser, bond_info_list):
    """
    与spider_jsl_bond_concept_parser.py内容进行对应合并
    :param df: 可转债信息的DataFrame
    :param concept_parser: 概念解析器实例
    :param bond_info_list: 可转债信息列表
    :return: 合并后的DataFrame
    """
    concept_data = []
    for _, row in bond_info_list.iterrows():
        bond_id, raw_data = concept_parser.fetch_one(row)
        if raw_data:
            parsed_data = concept_parser.parse(raw_data)
            concept_data.append(parsed_data)
    concept_df = pd.concat(concept_data, ignore_index=True)
    pd_merge = pd.merge(df, concept_df, on='bond_id', how='left')
    del pd_merge['bond_id']
    return pd_merge

def calculate_new_fields(df):
    """
    通过基于转债历史价格进行计算得出新字段
    :param df: 输入的DataFrame
    :param price_utils: 价格计算工具模块
    :return: 包含新字段的DataFrame
    """
    # 假设df中有对应的历史价格数据，这里简单示例
    df['支撑位'] = None
    # df['压力位'] = None
    # df['转债趋势'] = None
    # df['正股趋势'] = None
    for index, row in df.iterrows():
        # 假设这里有对应转债的历史价格数据读取
        # 示例调用price_utils中的函数
        # 这里只是示例，实际需要根据数据结构调整
        # strong_peaks = price_utils.calculate_strong_peaks(row)
        bond_id = row['转债代码']
        print(bond_id)
        bond_his_data = pd.read_csv(f'csv/{bond_id}_full.csv')
        strong_troughs = calculate_troughs_values(bond_his_data)
        df.at[index, '支撑位'] = strong_troughs[0][0]
        strong_troughs_generation = merge_number(strong_troughs)
        df.at[index, '支撑位强度'] = strong_troughs_generation[0][1]

        # df.at[index, '压力位'] = strong_peaks
        # 这里可以添加更多趋势计算逻辑
    return df

def export_csv(df, output_path):
    """
    导出DataFrame为CSV文件
    :param df: 输入的DataFrame
    :param output_path: 输出文件路径
    """
    df.to_csv(output_path, index=False)

def main():
    # 读取可转债信息列表.csv文件
    bond_info_file = '/Users/cat/Desktop/code/csv/可转债信息列表.csv'
    bond_info_df = read_bond_info_csv(bond_info_file)

    # 用户配置有用的字段
    useful_fields = ['转债代码', '转债名称', '现价', '涨跌幅', 
    '正股代码', '正股名称', '正股价', '正股涨跌', 
    '转债年化波动率', '转债20日BIAS', '正股20日BIAS', '正股roe', '发行日期', 
    '到期赎回价', '正股股息率','正股流通市值','下修条件','正股总市值', '地域',  '行业','转股价值',  '溢价率','评级', 
    '正股波动率', '正股换手率','转债流通市值占比', '到期时间', '到期时间', '剩余年限', '剩余规模', 
    '成交额', '正股成交额', '换手率', '到期税前收益','强赎状态','发行规模', '近5日涨跌幅', '近20日涨跌幅', '近3月涨跌幅', 
    '近1年涨跌幅', '正股5日涨跌幅', '正股20日涨跌幅', '正股3月涨跌幅', '正股1年涨跌幅', 
    '转债总市值占比', '到期税后收益', '转债流通规模', '转债流通市值', '剩余本息','近6月涨跌幅', '转债今年涨跌幅', '正股近6月涨跌幅', '正股今年涨跌幅', '资产负债率', '昨日转股']
    selected_df = select_useful_fields(bond_info_df, useful_fields)

    # 检查csv目录下是否存在jsl_bond_concept.csv文件
    concept_csv_path = 'csv/jsl_bond_concept.csv'
    if os.path.exists(concept_csv_path):
        # 若文件存在，直接读取文件
        concept_df = pd.read_csv(concept_csv_path)
        merged_df = pd.merge(selected_df, concept_df, left_on="转债代码",right_on='bond_id', how='left')
        del merged_df['bond_id']
    else:
        # 若文件不存在，初始化概念解析器并进行数据抓取
        concept_parser = Spider_jsl_bond_concept_parser(name='jsl_bond_concept', url='', data_process_type='merge', params={})
        merged_df = merge_with_concept_info(selected_df, concept_parser, bond_info_df)

    # 计算新字段
    new_df = calculate_new_fields(merged_df)

    # 导出CSV文件
    output_path = '/Users/cat/Desktop/code/csv/可转债信息导出.csv'
    export_csv(merged_df, output_path)

if __name__ == "__main__":
    main()